package gro.procesos.clases;


import gro.utilitarios.Global;
import gro.utilitarios.MostrarError;
import java.sql.*;
import java.util.LinkedHashMap;
import javax.swing.JFrame;

/**
 *
 * @author Vicente
 */
public class UsuarioMD {

    UsuarioDP udp;
    private Connection con;
    private Statement stmt;

    public UsuarioMD() {
    }

    public boolean agregarNuevoUsuarioMD(UsuarioDP udp) {
        this.udp = udp;
        if (crearConexion()) {
            String sql = "INSERT INTO usuario (US_USUARIO, US_CONTRASENA, US_PERMISO)"
                    + "VALUES ('" + udp.getUsuario() + "','" + udp.getContrasena() + "'," + Integer.parseInt(udp.getPermiso()) + ")";

            if (ejecutarSQL(sql)) {
                desconectar();
                return true;
            } else {
                desconectar();
                return false;
            }
        } else {
            desconectar();
            return false;
        }
    }

    public boolean eliminarEstudianteMD(UsuarioDP udp) {
        this.udp = udp;
        try {
            if (crearConexion()) {
                stmt = con.createStatement();
                String sql1 = "delete from usuario where us_codigo =" + udp.getCodigo();
                stmt.executeUpdate(sql1);
                desconectar();
                return true;
            }
            desconectar();
            return false;
        } catch (Exception ex) {
            desconectar();
            mensaje(ex.toString(), this.getClass().toString());
            return false;
        }
    }

    public boolean visualizarUsuarioMD(UsuarioDP udp) {
        this.udp = udp;
        int permiso;
        try {
            if (crearConexion()) {
                Statement stmt = con.createStatement();
                String sql = "select * from usuario where us_codigo=" + udp.getCodigo() + "";
                ResultSet rs = stmt.executeQuery(sql);
                while (rs.next()) {
                    udp.setUsuario(rs.getString("US_USUARIO").toString());
                    udp.setContrasena(rs.getString("US_CONTRASENA").toString());
                    permiso = Integer.parseInt(rs.getString("US_PERMISO").toString());
                    if (permiso == 1) {
                        udp.setPermiso("Doctor");
                    } else if (permiso == 2) {
                        udp.setPermiso("Secretaria");
                    }
                    desconectar();
                    return true;
                }
                desconectar();
                return false;
            }//if
            else {
                desconectar();
                return false;
            }
        } catch (Exception ex) {
            desconectar();
            mensaje(ex.toString(), this.getClass().toString());
            return false;
        }
    }

    public boolean validarUsuarioMD(UsuarioDP udp) {
        this.udp = udp;
        int permiso;
        try {
            if (crearConexion()) {
                Statement stmt = con.createStatement();
                String sql = "select * from usuario where us_usuario='" + udp.getUsuario() + "' and us_contrasena='" + udp.getContrasena() + "'";
                ResultSet rs = stmt.executeQuery(sql);
                while (rs.next()) {
                    if (udp.getUsuario().equals(rs.getString("US_USUARIO").toString()) && udp.getContrasena().equals(rs.getString("US_CONTRASENA").toString())) {
                        udp.setUsuario(rs.getString("US_USUARIO").toString());
                        udp.setContrasena(rs.getString("US_CONTRASENA").toString());
                        permiso = Integer.parseInt(rs.getString("US_PERMISO").toString());
                        if (permiso == 1) {
                            udp.setPermiso("Doctor");
                        } else if (permiso == 2) {
                            udp.setPermiso("Secretaria");
                        }
                        desconectar();
                        return true;
                    }
                }
                desconectar();
                return false;
            }//if
            else {
                desconectar();
                return false;
            }
        } catch (Exception ex) {
            desconectar();
            mensaje(ex.toString(), this.getClass().toString());
            return false;
        }
    }

    public boolean modificarUsuarioMD(UsuarioDP udp) {
        this.udp = udp;
        if (crearConexion()) {
            String sql1 = "UPDATE USUARIO SET US_USUARIO='" + udp.getUsuario() + "', US_CONTRASENA='" + udp.getContrasena()
                    + "', US_PERMISO=" + Integer.parseInt(udp.getPermiso()) + " WHERE US_CODIGO=" + udp.getCodigo() + "";

            if (ejecutarSQL(sql1)) {
                desconectar();
                return true;
            }
        }
        desconectar();
        return false;
    }

    public LinkedHashMap visualizarGereneralUsuarioMD(UsuarioDP udp) {
        this.udp = udp;
        String result = "";
        int permiso = 0;
        LinkedHashMap ht = new LinkedHashMap();
        try {
            if (crearConexion()) {
                Statement stmt = con.createStatement();
                ResultSet rs = stmt.executeQuery("select * from usuario");
                while (rs.next()) {
                    permiso = Integer.parseInt(rs.getString("US_PERMISO").toString());
                    if (permiso == 1) {
                        udp.setPermiso("Doctor");
                    } else if (permiso == 2) {
                        udp.setPermiso("Secretaria");
                    }
                    result = rs.getString("US_USUARIO").toString() + "," + rs.getString("US_CONTRASENA").toString() + "," + udp.getPermiso();
                    ht.put(rs.getString("US_CODIGO").toString(), result);
                }
                return ht;
            }//if
            return ht;
        } catch (Exception ex) {
            mensaje(ex.toString(), this.getClass().toString());
            return ht;
        }

    }

    //---------------------------Codigo de conexioes-------------------//
    public boolean crearConexion() {
        try {
            Class.forName(Global.pathDriver);
            con = DriverManager.getConnection(Global.direccionBase, Global.usuarioBase, Global.claveBase);
            stmt = con.createStatement();
            return true;
        } catch (Exception ex) {
            mensaje(ex.toString(), this.getClass().toString());
            return false;
        }
    }//crearConexion

    public void desconectar() {
        try {
            stmt.close();
            con.close();
        } catch (Exception ex) {
            mensaje(ex.toString(), this.getClass().toString());
        }
    }//desconectar

    public boolean ejecutarSQL(String sql) {
        try {
            Statement stmt = con.createStatement();
            stmt.executeUpdate(sql);
        } catch (SQLException ex) {
            mensaje(ex.toString(), this.getClass().toString());
            return false;
        }

        return true;
    }//ejecutarSQL

    public void mensaje(String mensaje, String metodo) {
        JFrame aux = new JFrame();
        MostrarError err = new MostrarError(aux, true, mensaje + " en " + metodo);
        err.setLocationRelativeTo(null);
        err.setVisible(true);
    }//mensaje
}//fin UsuarioMD
